package com.shuai.user.service;

import cn.hutool.json.JSONUtil;
import com.shuai.common.constant.UserConstant;
import com.shuai.user.constant.LoginTypeEnum;
import com.shuai.user.domain.entity.User;
import org.springframework.data.redis.core.RedisTemplate;

import javax.servlet.http.HttpServletResponse;

/**
 * 用户登录策略接口
 */
public interface LoginBaseService {
    /**
     * 登录接口
     */
    User login(Object request, HttpServletResponse response) throws Exception;

    /**
     * 登录类型接口，每个实现类必须覆写并且指定登录类型：LoginTypeEnum
     */
    LoginTypeEnum getLoginEnumType();

    /**
     * 所有状态登录后都要设置用户登录状态，在接口中定义了默认实现
     */
    default void setLoginState(User user, RedisTemplate<String, String> redisTemplate) {
        redisTemplate.opsForValue().set(UserConstant.USER_ATTRIBUTE_REDIS_KEY + user.getId(),
                JSONUtil.toJsonStr(user));
    }
}
